home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Garden Fax: Fruits, Vegetables & Herbs
/
Garden Fax - Fruits, Vegetables & Herbs (1991)(CDTV Publishing)[!].iso
/
system
/
basicdemos
/
demo
(
.txt
)
< prev
next >
Wrap
AmigaBASIC Source Code
|
1978-01-06
|
4KB
|
196 lines
REM --- Demo - Amiga BASIC Graphics demo --- 20-July-85
REM --- Modified 08/87 C. Scheppner - added Close gadget/logic to final window
DEFINT a-z
wins = 0 'cs
IF FRE(-1)<60000 THEN
REM --- on 256k machine, this is more limited demo
WINDOW 1,,,15
GOSUB InitAnimation
WHILE (WINDOW(7))
SLEEP 'Object Collisions will wake us up
WEND
ELSE
WINDOW 1,"Animation",(10,10)-(270,70),15
WINDOW 2,"Lines",(310,10)-(580,70),30
WINDOW 3,"Polygons",(10,95)-(270,170),30
COLOR 1,3
CLS
WINDOW 4,"Circles",(310,95)-(580,170),30
GOSUB InitAnimation
iDraw = 30
iErase = 0
wins = 15 'cs 4 bits, 1 for each window
WHILE (wins > 0)
WINDOW OUTPUT 1
IF WINDOW(7)=0 THEN wins = wins AND 14
NextLine 2
NextPoly 3
NextCircle 4
WEND
END IF
END 'cs
SUB NextLine(win) STATIC
SHARED iDraw, iErase
WINDOW OUTPUT win
'See if user closed the window
IF WINDOW(7)=0 THEN
wins = wins AND 13 'cs
EXIT SUB
END IF
DrawLine iDraw,1
DrawLine iErase,0
END SUB
SUB DrawLine(iStep, fDraw) STATIC
GetWindowDim winWidth, winHeight
iStep = (iStep + 1) MOD 60
hue = fDraw * ((iStep MOD 3) + 1)
side = INT(iStep / 15)
i!=(iStep MOD 15)/15
i1!=1-i!
ON side+1 GOSUB top,left,bottom,right
EXIT SUB
top:
LINE(winWidth*i!,0)-(winWidth,winHeight*i!),hue
RETURN
left:
LINE(winWidth,winHeight*i!)-(winWidth*i1!,winHeight),hue
RETURN
bottom:
LINE(winWidth*i1!,winHeight)-(0,winHeight*i1!),hue
RETURN
right:
LINE(0,winHeight*i1!)-(winWidth*i!,0),hue
RETURN
END SUB
SUB NextPoly(win) STATIC
WINDOW OUTPUT win
'See if user closed the window
IF WINDOW(7)=0 THEN
wins = wins AND 11 'cs
EXIT SUB
END IF
GetWindowDim winWidth, winHeight
i=(i MOD 8) + 1
IF i=1 THEN CLS
x = winWidth/2
y = winHeight/2
cosI! = (9-i)*0.1*COS(i)
sinI! = (9-i)*0.1*SIN(i)
XcosI = x*cosI!
XsinI = x*sinI!
YcosI = y*cosI!
YsinI = y*sinI!
AREA (x+XcosI,y+YsinI)
AREA (x+XsinI,y-YcosI)
AREA (x-XcosI,y-YsinI)
AREA (x-XsinI,y+YcosI)
COLOR RND*3
AREAFILL
END SUB
SUB NextCircle(win) STATIC
WINDOW OUTPUT win
'See if user closed the window
IF WINDOW(7)=0 THEN
winds = wins AND 7 'cs
EXIT SUB
END IF
GetWindowDim winWidth, winHeight
x = RND*winWidth
y = RND*winHeight
radius = RND*30+20
hue = INT(RND*4)
CIRCLE (x,y),radius,hue
PAINT (x,y),hue
END SUB
SUB GetWindowDim(winWidth, winHeight) STATIC
winWidth = WINDOW(2)
winHeight = WINDOW(3)
END SUB
InitAnimation:
WINDOW 1
LOCATE 4,4
COLOR 3,2
PRINT "Amiga Microsoft BASIC"
COLOR 1,0
ON COLLISION GOSUB BounceOff
COLLISION ON
OPEN "ball" FOR INPUT AS 1
OBJECT.SHAPE 1,INPUT$(LOF(1),1)
CLOSE 1
OBJECT.X 1,60
OBJECT.Y 1,50
OBJECT.VX 1,80
OBJECT.VY 1,80
OBJECT.SHAPE 2,1
OBJECT.X 2,50
OBJECT.Y 2,10
OBJECT.VX 2,40
OBJECT.VY 2,40
OBJECT.ON
OBJECT.START
RETURN
REM - BouncOff is called between BASIC
REM - statements whenever an object
REM - collides with another object or
REM - the border.
BounceOff:
saveId = WINDOW(1)
WINDOW OUTPUT 1
'See if user closed the window
IF WINDOW(7)=0 THEN RETURN
'Make object border sensitive to change in wie
CountDown = CountDown-1
IF CountDown<0 THEN
CountDown=10
OBJECT.CLIP (0,0)-(WINDOW(2),WINDOW(3))
END IF
BounceLoop:
i=COLLISION(0)
IF i=0 THEN BounceExit
j=COLLISION(i)
vxi = OBJECT.VX(i)
vyi = OBJECT.VY(i)
IF (j=-1 AND vyi < 0) OR (j=-3 AND vyi > 0) THEN
'object bounced off top or bottom border
OBJECT.VY i,-vyi
ELSEIF (j=-2 AND vxi < 0) OR (j=-4 AND vxi > 0) THEN
'object bounced off left or right border
OBJECT.VX i,-vxi
ELSEIF j>0 THEN
'2 objects bounced off each other
vyj = OBJECT.VY(j)
vxj = OBJECT.VX(j)
IF vyi*vyj < 0 THEN
OBJECT.VY i,-vyi
OBJECT.VY j,-vyj
END IF
IF vxi*vxj < 0 THEN
OBJECT.VX i,-vxi
OBJECT.VX j,-vxj
END IF
OBJECT.START j
END IF
OBJECT.START i
GOTO BounceLoop
BounceExit:
WINDOW OUTPUT saveId
RETURN